"""SQL路径处理工具类"""
from pathlib import Path
from typing import Tuple
from src.base.project_config import ProjectConfig

class SQLPathUtils:
    """SQL路径处理工具类"""

    @classmethod
    def get_output_dir(cls) -> Path:
        """获取制品目录路径

        Returns:
            Path: 制品目录路径
        """
        return ProjectConfig.get_output_dir()

    @classmethod
    def get_output_tables_dir(cls) -> Path:
        """获取表配置目录路径

        Returns:
            Path: 表配置目录路径
        """
        return cls.get_output_dir() / 'miaoma/artifacts/temp/tables1'

    @classmethod
    def get_output_table_dir(cls, table_name: str) -> Path:
        """获取指定表的目录路径

        Args:
            table_name: 表名

        Returns:
            Path: 表目录路径
        """
        return cls.get_output_tables_dir() / table_name

    @classmethod
    def get_output_merge_dir(cls, table_name: str) -> Path:
        """获取配置目录路径

        Args:
            table_name: 表名

        Returns:
            Path: 配置目录路径
        """
        return cls.get_output_table_dir(table_name) / 'merge'

    @classmethod
    def get_json_file_path(cls, table_name: str) -> Path:
        """获取JSON文件路径

        Args:
            table_name: 表名

        Returns:
            Path: JSON文件路径
        """
        # 获取配置目录
        config_dir = cls.get_output_merge_dir(table_name)

        # 尝试不同的文件名模式
        file_patterns = [
            "sql.json",
            f"{table_name}.json",
            f"table_{table_name}.json"
        ]

        for pattern in file_patterns:
            json_file = config_dir / pattern
            if json_file.exists():
                return json_file

        # 如果都不存在，返回默认文件名
        return config_dir / "sql.json"

    @classmethod
    def get_config_dirs(cls, table_name: str) -> Tuple[Path, Path]:
        """获取配置文件目录路径

        Args:
            table_name: 表名

        Returns:
            (artifacts_config_dir, assets_config_dir): 配置文件目录路径元组
        """
        artifacts_config_dir = cls.get_output_merge_dir(table_name)
        assets_config_dir = ProjectConfig.get_config_dir() / table_name
        return artifacts_config_dir, assets_config_dir